package com.itlong.cloud.app.dao;

import com.itlong.cloud.POJO.PO.TimeTaskDevicePassRecordPO;
import com.itlong.cloud.POJO.VO.app.AppGetPassRecordListPageVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      用户通行记录数据访问接口
 * </desc>
 *
 * @createDate 2017/11/09
 */
@Mapper
@Repository
public interface IAppDevicePassRecordDao extends IAbstractBaseDao<TimeTaskDevicePassRecordPO>{
    /**
     * <desc>
     *      保存用户通行记录
     * </desc>
     *
     * @param params 数据参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/09
     */
    Integer save(Map<String,Object> params);


    /**
     * <desc>
     *      用户获取有通行记录日期分页列表
     * </desc>
     *
     * @param params 查询参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/09
     */
    List<String> getPassDateListPage(Map<String,Object> params);

    /**
     * <desc>
     *      用户获取有通行记录日期分页列表
     * </desc>
     *
     * @param params 查询参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/09
     */
    Integer getPassDateListPageCount(Map<String,Object> params);

    /**
     * <desc>
     *      获取用户通行记录分页列表
     * </desc>
     *
     * @param params    查询参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/09
     */
    List<AppGetPassRecordListPageVO> getPage(Map<String,Object> params);

    /**
     * <desc>
     *      获取用户通行记录分页列表总条数
     * </desc>
     *
     * @param params    查询参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/09
     */
    Integer getPageCount(Map<String,Object> params);

    /**
     * <desc>
     *      保存用户通行记录
     * </desc>
     *
     * @param params 通行记录
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/10
     */
    Integer savePassRecords(Map<String,Object> params);

    /**
     * <desc>
     *      获取通行记录按用户分组最近的一次的通行时间
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/10
     */
    List<TimeTaskDevicePassRecordPO> getPassRecordUsers();

    /**
     * <desc>
     *      删除超过3个月的需要删除的通行记录
     * </desc>
     *
     * @param userId 用户id
     * @param passTime 通行时间
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/10
     */
    Integer deleteNeedClearPassRecord(@Param("userId")String userId,@Param("passTime")String passTime);

    /**
     * <desc>
     *      获取等待同步到具体设备通行记录的集合
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/10
     */
    List<TimeTaskDevicePassRecordPO> getWaitSynchroList();

    /**
     * <desc>
     *      更新同步状态
     * </desc>
     *
     * @param pdIds
     * @return
     * @author Jiaqi.X
     * @createDate  2017/11/10
     */
    Integer updateSynchro(@Param("pdIds")String[] pdIds);

    /**
     * <desc>
     *      根据设备唯一码获取设备名称
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author jiaqi.X
     * @createDate 2018/01/11
     */
    String getDeviceNameByDeviceUnique(@Param("deviceUnique") String deviceUnique,@Param("deviceType") Integer deviceType);

    /**
     * <desc>
     *      更新数据状态为正在同步状态
     * </desc>
     *
     * @param ids id数组
     * @return
     * @author Jiaqi.X
     * @createDate 2018/01/25
     */
    Integer updateSynchroStatus(@Param("ids") String[] ids);

    /**
     * <desc>
     *      批量插入数据
     * </desc>
     *
     * @param records
     * @return
     * @author Jiaqi.X
     * @createDate 2018/02/05
     */
    Integer batchInsert(@Param("records")List<TimeTaskDevicePassRecordPO> records);

    /**
     * <desc>
     *     删除3个月之前的用户通行临时记录
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2018/07/30
     */
    Integer deleteThreeMonthAgoData();

    /**
     * <desc>
     *      通过sn查询门禁设备名称
     * </desc>
     *
     * @param sn 设备sn
     * @return 设备名称
     * @author wangzhi
     * @createDate 2019/02/26
     */
    String getEntranceNameBySn(@Param("sn") String sn);

    /**
     * <desc>
     *      通过correlationId查询设备通行记录
     * </desc>
     *
     * @param correlationId 从iot开门指令中获取到的事件唯一id
     * @return 设备通行记录
     * @author wangzhi
     * @createDate 2019/02/26
     */
    TimeTaskDevicePassRecordPO getDevicePassRecordByCorrelationId(@Param("correlationId") String correlationId);

    /**
     * <desc>
     *      数据库更新操作
     * </desc>
     *
     * @param map 待更新数据参数
     * @return 受影响的行数
     * @author wangzhi
     * @createDate 2019/02/26
     */
    Integer update(Map<String, Object> map);

    /**
     * <desc>
     *      根据手机号查询用户id
     * </desc>
     *
     * @return 用户id
     * @author wangzhi
     * @createDate 2019/02/26
     */
    String getUserIdByPhone(@Param("uid") String uid);

    /**
     * <desc>
     *      查询云门禁通行记录是否已存在
     * </desc>
     *
     * @param correlationId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/03/06
     */
    Integer queryEntrancePassIsExists(@Param("correlationId") String correlationId);

    /**
     * <desc>
     *      通过deviceUnique查询门禁设备名称
     * </desc>
     *
     * @param deviceUnique 设备deviceUnique
     * @return 设备名称
     * @author wangzhi
     * @createDate 2019/03/07
     */
    String getEntranceNameByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取通行记录列表，app2.0版本新增
     * </desc>
     *
     * @param params 查询参数
     * @return 通行记录列表
     * @author wangzhi
     * @createDate 2019/06/18
     */
    List<Map<String, Object>> getOpenDoorRecord(Map<String, Object> params);

    /**
     * <desc>
     *      获取电梯通行记录列表，app2.0版本新增
     * </desc>
     *
     * @param params 查询参数
     * @return 通行记录列表
     * @author Qiang.S
     * @createDate 2019/06/26
     */
    List<Map<String, Object>> getLiftHistory(Map<String, Object> params);

    /**
     * <desc>
     *      变更通行记录通行方式
     * </desc>
     *
     * @param correlationId
     * @return
     * @author Juguang.S
     * @createDate 2020/09/22
     */
    Integer updateOpenType(@Param("correlationId") String correlationId);

    /**
     * <desc>
     *      变更电梯通行记录通行方式
     * </desc>
     *
     * @param deviceUnique 设备机号
     * @param passTime 通行时间
     * @return
     * @author Juguang.S
     * @createDate 2020/09/22
     */
    Integer updateElevatorOpenType(@Param("deviceUnique") String deviceUnique,@Param("passTime") String passTime,@Param("userId") String userId);

    /**
     * <desc>
     *      变更门禁通行记录通行方式
     * </desc>
     *
     * @param deviceUnique 设备机号
     * @param passTime 通行时间
     * @return
     * @author Juguang.S
     * @createDate 2020/09/22
     */
    Integer updateEntranceOpenType(@Param("deviceUnique") String deviceUnique,@Param("passTime") String passTime,@Param("userId") String userId);
}
